home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Mac Power 1997 December
/
MACPOWER-1997-12.ISO.7z
/
MACPOWER-1997-12.ISO
/
AMUG
/
PROGRAMMING
/
Raven 1.2.sit
/
Raven 1.2
/
Source
/
Foundation
/
OS
/
ZHelpMessage.cpp
< prev
next >
Wrap
Text File
|
1997-06-18
|
6KB
|
259 lines
/*
* File: ZHelpMessage.cpp
* Summary: A class that encapsulates a HMMessageRecord (ie the stuff in a help balloon).
* Written by: Jesse Jones
*
* Copyright ゥ 1996 Jesse Jones.
* For conditions of distribution and use, see copyright notice in ZTypes.h
*
* Change History (most recent first):
*
* <-> 8/01/96 JDJ Created
*/
#include <ZHelpMessage.h>
#include <TextUtils.h>
#include <ZDebug.h>
#include <ZNumbers.h>
#include <ZStringUtils.h>
// ===================================================================================
// struct THelpMessage
// ===================================================================================
//---------------------------------------------------------------
//
// THelpMessage::THelpMessage ()
//
//---------------------------------------------------------------
THelpMessage::THelpMessage()
{
mMessage.hmmHelpType = khmmString;
mMessage.u.hmmString[0] = '¥0';
}
//---------------------------------------------------------------
//
// THelpMessage::THelpMessage (ResType, ResID)
//
//---------------------------------------------------------------
THelpMessage::THelpMessage(ResType type, ResID id)
{
ASSERT(id >= 128);
if (type == 'STR ') {
mMessage.hmmHelpType = khmmSTRRes;
mMessage.u.hmmSTRRes = id;
} else if (type == 'TEXT') {
mMessage.hmmHelpType = khmmTERes;
mMessage.u.hmmTERes = id;
} else if (type == 'PICT') {
mMessage.hmmHelpType = khmmPict;
mMessage.u.hmmPictRes = id;
} else {
DEBUGSTR("THelpMessage::THelpMessage got a bad help type!");
mMessage.hmmHelpType = khmmString;
mMessage.u.hmmString[0] = '¥0';
}
}
//---------------------------------------------------------------
//
// THelpMessage::THelpMessage (ResType, ResID, short)
//
//---------------------------------------------------------------
THelpMessage::THelpMessage(ResType type, ResID id, short index)
{
#pragma unused(type) // non-debug
ASSERT(type == 'STR#');
ASSERT(id >= 128);
ASSERT(index >= 1);
mMessage.hmmHelpType = khmmStringRes;
mMessage.u.hmmStringRes.hmmResID = id;
mMessage.u.hmmStringRes.hmmIndex = index;
}
//---------------------------------------------------------------
//
// THelpMessage::THelpMessage (string)
//
//---------------------------------------------------------------
THelpMessage::THelpMessage(const string& mesg)
{
ASSERT(mesg.length() <= 255);
mMessage.hmmHelpType = khmmString;
ulong len = Min(mesg.length(), 255UL);
BlockMoveData(mesg.c_str(), mMessage.u.hmmString + 1, len);
mMessage.u.hmmString[0] = (Byte) len;
}
//---------------------------------------------------------------
//
// THelpMessage::operator==
//
//---------------------------------------------------------------
bool THelpMessage::operator==(const THelpMessage& rhs) const
{
bool equal = false;
if (mMessage.hmmHelpType == rhs.mMessage.hmmHelpType) {
if (mMessage.hmmHelpType == khmmSTRRes) {
equal = mMessage.u.hmmSTRRes == rhs.mMessage.u.hmmSTRRes;
} else if (mMessage.hmmHelpType == khmmStringRes) {
if (mMessage.u.hmmStringRes.hmmResID == rhs.mMessage.u.hmmStringRes.hmmResID)
equal = mMessage.u.hmmStringRes.hmmIndex == rhs.mMessage.u.hmmStringRes.hmmIndex;
} else if (mMessage.hmmHelpType == khmmTERes) {
equal = mMessage.u.hmmTERes == rhs.mMessage.u.hmmTERes;
} else if (mMessage.hmmHelpType == khmmPict) {
equal = mMessage.u.hmmPictRes == rhs.mMessage.u.hmmPictRes;
} else if (mMessage.hmmHelpType == khmmString) {
equal = EqualString(mMessage.u.hmmString, rhs.mMessage.u.hmmString, true, true);
} else {
DEBUGSTR("THelpMessage::operator== got a bad help type!");
}
}
return equal;
}
//---------------------------------------------------------------
//
// THelpMessage::IsEmpty
//
//---------------------------------------------------------------
bool THelpMessage::IsEmpty() const
{
bool empty = false;
if (mMessage.hmmHelpType == khmmString)
empty = mMessage.u.hmmString[0] == '¥0';
return empty;
}
//---------------------------------------------------------------
//
// THelpMessage::GetType
//
//---------------------------------------------------------------
ResType THelpMessage::GetType() const
{
ResType type;
switch (mMessage.hmmHelpType) {
case khmmSTRRes:
type = 'STR ';
break;
case khmmTERes:
type = 'TEXT';
break;
case khmmPict:
type = 'PICT';
break;
case khmmStringRes:
type = 'STR#';
break;
case khmmString:
type = 'STRL';
break;
default:
DEBUGSTR("THelpMessage::GetType has a bogus type!");
type = '????';
}
return type;
}
//---------------------------------------------------------------
//
// THelpMessage::GetID
//
//---------------------------------------------------------------
ResID THelpMessage::GetID() const
{
ResID id = 0;
switch (mMessage.hmmHelpType) {
case khmmSTRRes:
id = mMessage.u.hmmSTRRes;
break;
case khmmTERes:
id = mMessage.u.hmmTERes;
break;
case khmmPict:
id = mMessage.u.hmmPictRes;
break;
case khmmStringRes:
id = mMessage.u.hmmStringRes.hmmResID;
break;
case khmmString:
DEBUGSTR("THelpMessage::GetID was called for a string literal!");
break;
default:
DEBUGSTR("THelpMessage::GetID has a bogus type!");
}
return id;
}
//---------------------------------------------------------------
//
// THelpMessage::GetIndex
//
//---------------------------------------------------------------
short THelpMessage::GetIndex() const
{
ASSERT(mMessage.hmmHelpType == khmmStringRes);
return mMessage.u.hmmStringRes.hmmIndex;
}
//---------------------------------------------------------------
//
// THelpMessage::GetStringLiteral
//
//---------------------------------------------------------------
string THelpMessage::GetStringLiteral() const
{
ASSERT(mMessage.hmmHelpType == khmmString);
return PStrToStr(mMessage.u.hmmString);
}